
import java.util.Date;
import java.text.SimpleDateFormat;

class VagaService {

    static transactional = true;

    /*
     * Verifica se a vaga possui vagas abertas.
     */
    boolean possuiVagasAbertas(Vaga vaga){
        if(vaga.qtdeVagas > 0){
            return true;
        }else{
            return false;
        }
    }

    /*
     * Verifica se a vaga está ativa.
     */
    boolean vagaEstaAtiva(Vaga vaga){
        if(vaga.status == '1'){
            return true;
        }else{
            return false;
        }
    }

    /*
     * Decrementa uma vaga.
     */
    boolean diminuirVaga(Vaga vaga){
        vaga.qtdeVagas -= 1;
        vaga.properties = vaga;
        if(vaga.save()){
            // Se a quantidade de vagas é zero, fecha a vaga.
            if(vaga.qtdeVagas == 0){
                fechaVaga(vaga);
            }
            return true;
        }else{
            return false;
        }
    }

    /*
     * Aumenta uma vaga.
     */
    boolean aumentarVaga(Vaga vaga){
        def qtde = vaga.qtdeVagas;
        vaga.qtdeVagas += 1;
        vaga.properties = vaga;
        if(vaga.save()){
            // Se a quantidade de vagas é um e era zero, a a vaga.
            if((vaga.qtdeVagas == 1) && (qtde == 0)){
                abreVaga(vaga);
            }
            return true;
        }else{
            return false;
        }
    }

    /*
     * Método que fecha a vaga quando acabam as vagas.
     */
    void fechaVaga(Vaga vaga){
        Date hoje = new Date();
        SimpleDateFormat formatador  = new SimpleDateFormat('dd/MM/yyyy hh:MM:ss');

        def vagaInstance = Vaga.get(vaga.id);
        if(vagaInstance.qtdeVagas == 0){
            vagaInstance.dtFechamento       = Date.parse('dd/MM/yyyy hh:MM:ss',formatador.format(hoje));
            vagaInstance.motivoFecha        = 'Acabaram as vagas.'
            vagaInstance.justificativaFecha = 'Acabaram as vagas.'
            vagaInstance.properties         = vagaInstance;
            vagaInstance.save()
        }
    }


    /*
     * Método que abre a vaga.
     * Quando a solicitação é excluída a vaga volta a ter vagas e a mesma precisa ser aberta
     */
    void abreVaga(Vaga vaga){
        Date hoje = new Date();
        SimpleDateFormat formatador  = new SimpleDateFormat('dd/MM/yyyy hh:MM:ss');

        def vagaInstance = Vaga.get(vaga.id);
        vagaInstance.dtFechamento       = null;;
        vagaInstance.motivoFecha        = ''
        vagaInstance.justificativaFecha = ''
        vagaInstance.properties         = vagaInstance;
        vagaInstance.save()
    }


    /*
     * Verifica se a vaga já possui tce.
     */
    boolean vagaPossuiTce(Vaga vaga) {
        def solicitacao = Solicitacao.findAllByVaga(vaga);
        for(Solicitacao solicitacaoInstance: solicitacao){
            if(Tce.findBySolicitacao(solicitacaoInstance)){
                return true;
            }
        }
        return false;
    }


    /*
     * Verifica se a vaga esta fechada.
     */
    boolean vagaEstaFechada(Vaga vaga) {
        def vagaInstance = vaga;
        if(vagaInstance.dtFechamento && vagaInstance.motivoFecha){
            return true;
        }else{
            return false;
        }
    }


    /*
     * Método que busca as últimas 5 vagas cadastradas.
     */
    public Vaga ultimasVagas(){
        //def vagas = Vaga.createCriteria()
        //def results = vagas.list {
        //    and {
        //        gt("qtdeVagas", 0)
        //        eq("status", 1)
        //        isNull("dtFechamento")
        //    }
        //    maxResults(5)
        //    order("dtCadastro", "desc")
        //}

        Vaga vaga = Vaga.executeQuery("SELECT va FROM Vaga va WHERE va.qtdeVagas > 0 AND va.status = 1 ORDER BY va.dtCadastro DESC LIMIT 5");

        return vaga;
    }

}
